package com.fengwk.cv4j.view.common;

import com.fengwk.cv4j.compute.Compute;
import com.fengwk.cv4j.factory.ViewFactory;
import com.fengwk.cv4j.view.View;
import com.fengwk.cv4j.view.ViewImpl;
import com.fengwk.support.exception.BaseException;

/**
 * 通用的sin算子
 * 
 * @author fengwk
 *
 * @param <T>
 */
public class SinView<T> extends ViewImpl<T> {

    private static final long serialVersionUID = -1243352032550703641L;

    public SinView(Compute<T> compute, ViewFactory<T> factory, @SuppressWarnings("unchecked") View<T>...vs) {
        super(compute, factory, vs);
        checkVs(1, vs);
    }

    @Override
    protected T compute0() {
    	return c().sin(t(0));
    }

    @Override
    protected View<T> gradient0(int idx) {
        // y=sinx,y'=cosx
        if (idx == 0)
            return f().cos(v(0));
        throw new BaseException("idx != 0");
    }
    
    @Override
    public String toString() {
        return "sin";
    }

}
